// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_COMMON_CREDENTIAL_PROVIDER_CREDENTIAL_STORE_H_
#define IOS_CHROME_COMMON_CREDENTIAL_PROVIDER_CREDENTIAL_STORE_H_

#import <Foundation/Foundation.h>

@protocol Credential;

// Manages the storage for credentials.
@protocol CredentialStore

// All the stored credentials.
@property(nonatomic, readonly) NSArray<id<Credential>>* credentials;

// Returns the credential with matching `recordIdentifier` or nil if none.
- (id<Credential>)credentialWithRecordIdentifier:(NSString*)recordIdentifier;

@end

// Manages a mutable store for credentials.
@protocol MutableCredentialStore <CredentialStore>

// When supported by the store save data to disk. `error` will be nil if the
// save operation was successful, otherwise it will be the error generated by
// the system.
- (void)saveDataWithCompletion:(void (^)(NSError* error))completion;

// Removes all the credentials. Use `-saveDataWithCompletion:` to
// update the data on disk.
- (void)removeAllCredentials;

// Adds a credential to the memory storage. Use `-saveDataWithCompletion:` to
// update the data on disk.
- (void)addCredential:(id<Credential>)credential;

// Updates a credential in the memory storage. Use `-saveDataWithCompletion:` to
// update the data on disk.
- (void)updateCredential:(id<Credential>)credential;

// Removes a credential from the memory storage. Use `-saveDataWithCompletion:`
// to update the data on disk.
- (void)removeCredentialWithRecordIdentifier:(NSString*)recordIdentifier;

@end

#endif  // IOS_CHROME_COMMON_CREDENTIAL_PROVIDER_CREDENTIAL_STORE_H_
